﻿using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Text;
using System.Windows.Forms;
using QldtSdh.BLL;
using QldtSdh.DAL.Models;
using QldtSdh.GUI.Utils;

namespace QldtSdh.GUI.DuLieu
{
    public partial class FormQuanLyLopKhoaNganh_ChiTiet : QldtSdh.GUI.Common.BaseDialog
    {
        KhoaHoc khoaHoc;
        NganhDaoTao nganh;
        LopKhoaNganh lop;
        int countEntityTobeAdded = 0;
        public event Common.TListChangedEventHandler OnChanged;
        public FormQuanLyLopKhoaNganh_ChiTiet(KhoaHoc khoaHoc, NganhDaoTao nganh, LopKhoaNganh lop = null)
        {
            InitializeComponent();
            this.khoaHoc = khoaHoc;
            this.nganh = nganh;
            this.lop = lop;
            LoadCSDT();
            LoadCTDT();
            InitInterface();
        }

        void LoadCSDT()
        {
            cmbCSDT.DataSource = BizCoSoDaoTao.GetList();
            cmbCSDT.DisplayMember = "TenCoSoDaoTao";
            cmbCSDT.ValueMember = "MaCoSoDaoTaoGUID";
        }

        void LoadCTDT()
        {
            cmbCTDT.DataSource = BizChuongTrinhDaoTao.GetList(nganh.MaNganhDaoTaoGUID, khoaHoc.MaKhoaHocGUID);
            cmbCTDT.DisplayMember = "TenChuongTrinhDaoTao";
            cmbCTDT.ValueMember = "MaChuongTrinhDaoTaoGUID";
        }

        void InitInterface()
        {
            txtKhoaHoc.Text = khoaHoc.TenKhoaHoc;
            txtNganhDaoTao.Text = nganh.TenNganhDaoTao;
            if (lop != null)
            {
                this.Text = string.Format(TITLE_FORM_DETAIL.EDIT, ENTITY_NAME.LOPKHOANGANH);
                KhoaHoc_NganhDaoTao khoaNganh = BizKhoaHoc_NganhDaoTao.GetByID(lop.MaDaoTaoKhoaNganhGUID);
                if (cmbCTDT.SelectedIndex != -1 && khoaNganh != null)
                    cmbCTDT.SelectedValue = khoaNganh.MaChuongTrinhDaoTaoGUID;
                if (cmbCSDT.SelectedIndex != -1)
                    cmbCSDT.SelectedValue = lop.MaCoSoDaoTaoGUID;
                txtTenLop.Text = lop.TenLopKhoaNganh;
                chkTiepTucBoSung.Checked = chkTiepTucBoSung.Visible = chkTiepTucBoSung.Enabled = false;
            }
            else
            {
                this.Text = string.Format(TITLE_FORM_DETAIL.ADDNEW, ENTITY_NAME.LOPKHOANGANH);
                txtTenLop.Text = nganh.MaNganhDaoTao + "K" + khoaHoc.NamTuyenSinh;
            }
            cmbCTDT.Focus();
        }

        bool ValidateData()
        {
            errorNotify.Clear();
            if (cmbCTDT.SelectedIndex == -1)
            {
                errorNotify.SetError(cmbCTDT, "Bạn chưa chọn Chương trình Đào tạo");
                return false;
            }
            if (cmbCSDT.SelectedIndex == -1)
            {
                errorNotify.SetError(cmbCSDT, "Bạn chưa chọn Cơ sở Đào tạo");
                return false;
            }
            if (string.IsNullOrEmpty(txtTenLop.Text))
            {
                errorNotify.SetError(txtTenLop, "Bạn chưa nhập tên lớp");
                return false;
            }
            return true;
        }

        private void btnDongY_Click(object sender, EventArgs e)
        {
            if (ValidateData())
            {
                KhoaHoc_NganhDaoTao khoaNganh = BizKhoaHoc_NganhDaoTao.GetByID(khoaHoc.MaKhoaHocGUID, nganh.MaNganhDaoTaoGUID, cmbCTDT.SelectedValue.ToString());
                if (khoaNganh == null)
                {
                    DialogUtils.ShowError("Khóa ngành không tồn tại");
                    return;
                }
                if (lop != null)
                {
                    lop.TenLopKhoaNganh = txtTenLop.Text;
                    lop.MaCoSoDaoTaoGUID = cmbCSDT.SelectedValue.ToString();
                    lop.MaDaoTaoKhoaNganhGUID = khoaNganh.MaDaoTaoKhoaNganhGUID;
                    var rs = BizLopKhoaNganh.Update(lop);
                    if (rs == CODE_RESULT_RETURN.ThanhCong)
                        this.DialogResult = System.Windows.Forms.DialogResult.OK;
                    else if (rs == CODE_RESULT_RETURN.TenTrung)
                        DialogUtils.ShowError("Tên lớp này đã tồn tại");
                    else
                        DialogUtils.ShowError("Lớp này không tồn tại!");
                }
                else
                {
                    lop = new LopKhoaNganh();
                    lop.TenLopKhoaNganh = txtTenLop.Text;
                    lop.MaCoSoDaoTaoGUID = cmbCSDT.SelectedValue.ToString();
                    lop.MaDaoTaoKhoaNganhGUID = khoaNganh.MaDaoTaoKhoaNganhGUID;
                    var rs = BizLopKhoaNganh.Add(lop);
                    lop = null;
                    if (rs == CODE_RESULT_RETURN.ThanhCong)
                    {
                        countEntityTobeAdded++;
                        OnChanged(this, null);
                        if (chkTiepTucBoSung.Checked)
                        {
                            InitInterface();
                            DialogUtils.ShowMessage("Đã thêm lớp-khóa-ngành thành công. Xin mời tạo tiếp");
                        }
                        else
                            this.DialogResult = System.Windows.Forms.DialogResult.OK;
                    }
                    else if (rs == CODE_RESULT_RETURN.TenTrung)
                        DialogUtils.ShowError("Tên lớp này đã tồn tại");
                    else
                        DialogUtils.ShowError("Không thể thêm lớp này!");
                }
            }
        }

        private void FormQuanLyLopKhoaNganh_ChiTiet_FormClosing(object sender, FormClosingEventArgs e)
        {
            if (countEntityTobeAdded > 0)
                this.DialogResult = System.Windows.Forms.DialogResult.OK;
        }
    }
}
